﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using ContratanteService.Persistencia;
using ContratanteService.Dominio;

namespace ContratanteService
{
    public class Contratantes : IContratantes
    {
        private ContratanteDAO contratanteDAO = null;

        private ContratanteDAO ContratanteDAO
        {
            get
            {
                if (contratanteDAO == null)
                    contratanteDAO = new ContratanteDAO();
                return contratanteDAO;
            }
        }


        public Contratante CrearContratante(string DocIdentidad, string NumDocumento, string EMail, string Usuario, string Password, string Razon_Social, string departamento, string provincia, string distrito, string Direccion, string Telefono)
        {
            //Verifica que no exista un contratante con el mismo numero de documento
            //Contratante contratanteExiste = ListarContratante().Find(p => p.DocIdentidad == DocIdentidad);
            Contratante contratanteExiste = ListarContratante().Find(delegate(Contratante p) { return p.NumDocumento == NumDocumento; });
            Contratante contratanteACrear;

            if (contratanteExiste == null)
            {
                contratanteACrear = new Contratante()
                {
                    EMail = EMail,
                    Usuario = Usuario,
                    Password = Password,
                    DocIdentidad = DocIdentidad,
                    NumDocumento = NumDocumento,
                    Razon_Social = Razon_Social,
                    Direccion = Direccion,
                    Telefono = Telefono,
                    Estado = 0,
                    Departamento = departamento,
                    Provincia = provincia,
                    Distrito = distrito
                };
                return ContratanteDAO.Crear(contratanteACrear);
            }
            else {
                ValidationException fault = new ValidationException {ValidationError="Este Contratante ya se encuentra registrado"};
                throw new FaultException<ValidationException>(fault, new FaultReason("Este Contratante ya se encuentra registrado"));                                      
            }
            
        }


        public Contratante ObtenerContratante(int id)
        {
            return ContratanteDAO.Obtener(id);
        }

        public void EliminarContratante(int id)
        {
            Contratante contratanteExistente = ContratanteDAO.Obtener(id);
            ContratanteDAO.Eliminar(contratanteExistente);
        }

        public List<Contratante> ListarContratantesAdmin(string tipo)
        {
            return ContratanteDAO.ListarTodosAdmin(int.Parse(tipo)).ToList();
        }

        public List<Contratante> ListarContratante()
        {
            return ContratanteDAO.ListarTodos().ToList();
        }

        public Contratante ModificarContratante(string DocIdentidad, string NumDocumento, string EMail, string usuario, string Password, string Razon_Social, string departamento, string provincia, string distrito, string Direccion, string Telefono, int Estado, string Descripcion_Rechazo)
        {
            Contratante contratanteAModificar = new Contratante()
            {
                DocIdentidad = DocIdentidad,
                NumDocumento = NumDocumento,
                EMail = EMail,
                Usuario = usuario,
                Password = Password,
                Razon_Social = Razon_Social,
                Departamento = departamento,
                Provincia = provincia,
                Distrito = distrito,
                Direccion = Direccion,
                Telefono = Telefono,
                Estado = Estado,
                Descripcion_Rechazo = Descripcion_Rechazo

            };

            return ContratanteDAO.Modificar(contratanteAModificar);
        }

    }
}
